/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jproyectoautomataforfloat;

import javax.swing.JOptionPane;

/**
 *
 * @author EDYSON
 */
public class Automata {

    private String palabra = "";
    private char[] caracter;
    int contador;

    public Automata(String palabra) {
        this.palabra = palabra;
        caracter = palabra.toCharArray();
        metodo_iniciar();
    }

    // metodo 
    public void metodo_iniciar() {
        contador = 0;
        nodoA();

    }

    public void nodoA() {
        if (contador < caracter.length) {
            if ((caracter[contador] == 'l') || (caracter[contador] == 'o') || (caracter[contador] == 'a') || (caracter[contador] == 'r') || (caracter[contador] == 't')) {
                nodoI();

            } else {
                if (caracter[contador] == 'f') {
                    contador++;
                    nodoB();
                    nodoG();
                } else {

                    palabrasNoAceptadas();
                }
              
            }
        }
    }

    public void nodoB() {
        if (contador < caracter.length) {
            if ((caracter[contador] == 'f') || (caracter[contador] == 'o') || (caracter[contador] == 'a') || (caracter[contador] == 't') || (caracter[contador] == 'r')) {
                nodoI();
            } else {
                if (caracter[contador] == 'l') {
                    contador++;
                    nodoC();
                } else {
                    palabrasNoAceptadas();
                }

            }
        }
    }

    public void nodoC() {
        if (contador < caracter.length) {
            if (caracter[contador] == 'f' || caracter[contador] == 'l' || caracter[contador] == 'a' || caracter[contador] == 't' || caracter[contador] == 'r') {
                nodoI();
            } else {
                if (caracter[contador] == 'o') {
                    contador++;
                    nodoD();
                } else {
                    palabrasNoAceptadas();
                }
            }
        }

    }

    public void nodoD() {
        if (contador < caracter.length) {
            if ((caracter[contador] == 'f' || caracter[contador] == 'l' || caracter[contador] == 'o' || caracter[contador] == 't' || caracter[contador] == 'r')) {
                nodoI();
            } else {
                if (caracter[contador] == 'a') {
                    contador++;
                    nodoE();
                } else {
                    palabrasNoAceptadas();
                }
            }
        }
    }

    public void nodoE() {
        if (contador < caracter.length) {
            if ((caracter[contador] == 'f' || caracter[contador] == 'l' || caracter[contador] == 'o' || caracter[contador] == 'a' || caracter[contador] == 'r')) {
                nodoI();
            } else {
                if (caracter[contador] == 't') {
                    contador++;
                    nodoF();
                } else {
                    palabrasNoAceptadas();
                }
            }

        }
    }

    public void nodoF() {
        if (caracter.length == 5) {
            JOptionPane.showMessageDialog(null, "El automata acepta la cadena ---->" + palabra);
            return;
        } else {
            if (contador < caracter.length) {
                if ((caracter[contador] == 'l') || (caracter[contador] == 'o') || (caracter[contador] == 'a') || (caracter[contador] == 'r') || (caracter[contador] == 't')) {
                    nodoI();
                } else {
                    palabrasNoAceptadas();
                }
            }
        }
    }

    public void nodoG() {

        if (caracter.length == 3) {
            if ((caracter[contador] == 'o') || (caracter[contador] == 'r')) {

                JOptionPane.showMessageDialog(null, "El automata acepta la cadena ---->" + palabra);
                return;
            } else {
                if (contador < caracter.length) {
                    if ((caracter[contador] == 'l') || (caracter[contador] == 'o') || (caracter[contador] == 'a') || (caracter[contador] == 'r') || (caracter[contador] == 't')) {
                        nodoI();
                    } else {
                        palabrasNoAceptadas();
                    }
                }
            }
        }
    }

    public void nodoI() {
        JOptionPane.showMessageDialog(null, "Palabra no válida dentro del automata", "ERROR", JOptionPane.ERROR_MESSAGE);
        return;
    }

    public void palabrasNoAceptadas() {
        if ((caracter[contador] != 'a') || (caracter[contador] != 'f') || (caracter[contador] != 'l') || (caracter[contador] != 'o')
                || (caracter[contador] != 'r') || (caracter[contador] != 't')) {
        }

        JOptionPane.showMessageDialog(null, "PALABRA FORMADA POR PALABRAS FUERA DEL ALFABETO", "ERROR", JOptionPane.ERROR_MESSAGE);
        return;
    }
}